import { API_URL } from "@/env";
import router from "@/common/router";
export default {
  /**
   * 跳转再封装，不支持复杂传参。
   */
  routerTo(path, params = {}, isLogin) {
    let objParams = params;
    // 是否跳转外部链接
    if (~path.indexOf("http")) {
      // #ifdef H5
      window.location = path;
      // #endif
      // #ifndef  H5
      router.push({
        path: "/pages/public/webview",
        query: {
          webviewPath: path,
        },
      });
      // #endif
      return false;
    }
    // 判断是否有参数
    if (path.indexOf("?") !== -1) {
      let index = path.lastIndexOf("?");
      let query = path.substring(index + 1, path.length);
      let arr = query.split("&");
      path = path.slice(0, index);
      arr.forEach((item) => {
        let mArr = [];
        let obj = {};
        mArr = item.split("=");
        obj[mArr[0]] = mArr[1];
        objParams = {
          ...objParams,
          ...obj,
        };
      });
    }
    // 判断是否是tabbar
    if (isLogin) {
      router.replaceAll({
        path: path,
        query: objParams,
      });
    } else {
      router.push({
        path: path,
        query: objParams,
      });
    }
  },
  /**
   * fn：检测图片协议，主要用于检测海报图片协议。
   * param(imgPath): 图片地址。
   */

  checkImgHttp(imgPath) {
    let newPath = "";
    let pathArr = imgPath.split("://");
    // #ifdef H5
    let ishttps = "https:" == window.location.protocol ? true : false;
    ishttps ? (pathArr[0] = "https") : (pathArr[0] = "http");
    // #endif
    // #ifdef MP-WEIXIN
    pathArr[0] = "https";
    // #endif
    newPath = pathArr.join("://");
    return newPath;
  },
  // 打电话
  callPhone(phoneNumber = "") {
    let num = phoneNumber.toString();
    uni.makePhoneCall({
      phoneNumber: num,
      fail(err) {
        console.log("makePhoneCall出错", err);
      },
    });
  },
  // 图片处理-选择图片
  chooseImage(count = 1) {
    return new Promise((resolve, reject) => {
      uni.chooseImage({
        count: count, //默认9
        sizeType: ["original", "compressed"], //可以指定是原图还是压缩图，默认二者都有
        sourceType: ["album"], //从相册选择
        success: (res) => {
          resolve(res.tempFilePaths);
        },
      });
    }).catch((e) => {
      reject(e);
    });
  },
  // 图片处理-上传图片
  uploadImage(api, url) {
    let config_url = API_URL;
    uni.showLoading({
      title: "上传中",
    });
    return new Promise((resolve, reject) => {
      uni.uploadFile({
        url: config_url + api,
        filePath: url,
        name: "file",
        success: (res) => {
          res = JSON.parse(res.data);
          if (res.code === 1) {
            uni.hideLoading();
            uni.showToast({
              title: "上传成功",
              icon: "none",
            });
            resolve(res.data);
          } else {
            uni.hideLoading();
            uni.showModal({
              title: "上传失败",
              content: res.msg,
            });
          }
        },
      });
    }).catch((e) => {
      reject(e);
    });
  },
  // 图片处理-预览图片
  previewImage(urls = [], current = 0) {
    uni.previewImage({
      urls: urls,
      current: current,
      indicator: "default",
      loop: true,
      fail(err) {
        console.log("previewImage出错", urls, err);
      },
    });
  },
  // 图片处理-获取图片信息
  getImageInfo(src = "") {
    return new Promise((resolve, reject) => {
      uni.getImageInfo({
        src: src,
        success: (image) => {
          resolve(image);
        },
        fail(err) {
          console.log("getImageInfo出错", src, err);
        },
      });
    }).catch((e) => {
      reject(e);
    });
  },
  /**
   * 格式化时间
   */
  //时间格式化 天时分秒
  format(t) {
    let format = {
      d: "00",
      h: "00",
      m: "00",
      s: "00",
    };
    if (t > 0) {
      let d = Math.floor(t / 86400);
      let h = Math.floor((t / 3600) % 24);
      let m = Math.floor((t / 60) % 60);
      let s = Math.floor(t % 60);
      format.d = d < 10 ? "0" + d : d;
      format.h = h < 10 ? "0" + h : h;
      format.m = m < 10 ? "0" + m : m;
      format.s = s < 10 ? "0" + s : s;
    }
    return format;
  },
  //时间格式化(格式化最大为小时)
  formatToHours(t) {
    let format = {
      d: "00",
      h: "00",
      m: "00",
      s: "00",
    };
    if (t > 0) {
      let h = Math.floor(t / 3600);
      let m = Math.floor((t / 60) % 60);
      let s = Math.floor(t % 60);

      format.h = h < 10 ? "0" + h : h;
      format.m = m < 10 ? "0" + m : m;
      format.s = s < 10 ? "0" + s : s;
    }
    return format;
  },
  // 年月日
  timestamp(timestamp) {
    let date = new Date(timestamp * 1000); //根据时间戳生成的时间对象
    let y = date.getFullYear();
    let m = date.getMonth() + 1;
    let d = date.getDate();

    m = m < 10 ? "0" + m : m;
    d = d < 10 ? "0" + d : d;

    let dateText = y + "-" + m + "-" + d;
    return dateText;
  },
  // 年月日，时分秒
  // "YYYY-mm-dd HH:MM"
  dateFormat(fmt, date) {
    let ret;
    const opt = {
      "Y+": date.getFullYear().toString(), // 年
      "m+": (date.getMonth() + 1).toString(), // 月
      "d+": date.getDate().toString(), // 日
      "H+": date.getHours().toString(), // 时
      "M+": date.getMinutes().toString(), // 分
      "S+": date.getSeconds().toString(), // 秒
      // 有其他格式化字符需求可以继续添加，必须转化成字符串
    };
    for (let k in opt) {
      ret = new RegExp("(" + k + ")").exec(fmt);
      if (ret) {
        fmt = fmt.replace(
          ret[1],
          ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, "0")
        );
      }
    }
    return fmt;
  },
  /**
   *  @fn  时间间隔格式化
   *  @param {*} startTime 开始时间的时间戳
   *  @param {*} endTime 结束时间的时间戳
   *  @return {string} str 返回时间字符串
   */
  getTimeInterval(startTime, endTime) {
    let runTime = parseInt((endTime - startTime) / 1000);
    let year = Math.floor(runTime / 86400 / 365);
    runTime = runTime % (86400 * 365);
    let month = Math.floor(runTime / 86400 / 30);
    runTime = runTime % (86400 * 30);
    let day = Math.floor(runTime / 86400);
    runTime = runTime % 86400;
    let hour = Math.floor(runTime / 3600);
    runTime = runTime % 3600;
    let minute = Math.floor(runTime / 60);
    runTime = runTime % 60;
    let second = runTime;
    let str = "";
    if (year > 0) {
      str = year + "年";
    }
    if (year <= 0 && month > 0) {
      str = month + "月";
    }
    if (year <= 0 && month <= 0 && day > 0) {
      str = day + "天";
    }
    if (year <= 0 && month <= 0 && day <= 0 && hour > 0) {
      str = hour + "小时";
    }
    if (year <= 0 && month <= 0 && day <= 0 && hour <= 0 && minute > 0) {
      str = minute + "分钟";
    }
    if (
      year <= 0 &&
      month <= 0 &&
      day <= 0 &&
      hour <= 0 &&
      minute <= 0 &&
      second > 0
    ) {
      str += second + "秒";
    }
    str += "前";
    return str;
  },

  /**提示框
   *title(标题)
   *icon(图标):  success，loading，none
   *duration(延时): 0为不关闭, 毫秒数
   *options(其它参数)
   */
  toast(title, icon = "none", options) {
    wx.showToast({
      title: title || "",
      icon: icon,
      duration: (options && options.duration) || 1500,
      image: (options && options.image) || "",
      mask: (options && options.mask) || true,
    });
  },

  /**
   *@alias 节流
   *@param {function} fn 节流被执行函数
   *@param {Number}  delay 时间单位内
   */
  throttle(fn, delay) {
    let flag = true,
      timer = null;
    return function (...args) {
      let context = this;
      if (!flag) return;
      flag = false;
      clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(context, args);
        flag = true;
      }, delay);
    };
  },

  /**
   *@alias 防抖
   *@param {function} fn 防抖被执行函数
   *@param {Number}  delay 时间单位内
   */
  debounce(fn, delay) {
    let timer = null;
    return function (...args) {
      let context = this;
      if (timer) clearTimeout(timer);
      timer = setTimeout(function () {
        fn.apply(context, args);
      }, delay);
    };
  },
};
